home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / iconv8_s.arc / ICONT.ARC / TLOCAL.C < prev    next >
C/C++ Source or Header  |  1990-03-28  |  6KB  |  302 lines

  1. /*
  2.  *  tlocal.c -- functions needed for different systems.
  3.  */
  4.  
  5. #include "..\h\config.h"
  6.  
  7. /*
  8.  * The following code is operating-system dependent [@tlocal.01].
  9.  *  Routines needed by different systems.
  10.  */
  11.  
  12. #if PORT
  13. /* place to put anything system specific */
  14. Deliberate Syntax Error
  15. #endif                    /* PORT */
  16.  
  17. #if AMIGA
  18. #if AZTEC_C
  19. /*
  20.  * abs
  21.  */
  22. abs(i)
  23. int i;
  24. {
  25.    return ((i<0)? (-i) : i);
  26. }
  27.  
  28. /*
  29.  * getfa - get file attribute -1 == OK, 0 == ERROR, 1 == DIRECTORY
  30.  */
  31. getfa()
  32. {
  33.    return -1;
  34. }
  35. #endif                    /* AZTEC_C */
  36. #endif                    /* AMIGA */
  37.  
  38. #if ATARI_ST
  39.  
  40. unsigned long _STACK = 10240;   /*   MNEED ALSO, PLEASE */
  41.  
  42. #endif                    /* ATARI_ST */
  43.  
  44. #if HIGHC_386
  45. #endif                    /* HIGHC_386 */
  46.  
  47. #if MACINTOSH
  48. #if MPW
  49. /* Floating Point Conversion Routine Stubs
  50.  
  51.    These routines, called by printf, are only necessary if floating point
  52.    formatting is used.
  53. */
  54.  
  55. char *ecvt(value,count,dec,sign)
  56. double value;
  57. int count,*dec,*sign;
  58. {
  59. /* #pragma unused(value,count,dec,sign) */
  60. return NULL;
  61. }
  62. fcvt() {}
  63.  
  64.  
  65. /* Routine to set file type and creator.
  66. */
  67.  
  68. #include <Files.h>
  69.  
  70. void
  71. setfile(filename,type,creator)
  72. char *filename;
  73. OSType type,creator;
  74.    {
  75.    FInfo info;
  76.  
  77.    if (getfinfo(filename,0,&info) == 0) {
  78.       info.fdType = type;
  79.       info.fdCreator = creator;
  80.       setfinfo(filename,0,&info);
  81.       }
  82.    return;
  83.    }
  84.  
  85.  
  86. /* Routine to quote strings for MPW
  87. */
  88.  
  89. char *
  90. mpwquote(s)
  91. char *s;
  92.    {
  93.    static char quotechar[] =
  94.      " \t\n\r#;&|()6'\"/\\{}`?E[]+*GH(<>3I7";
  95.    static char *endq = quotechar + sizeof(quotechar);
  96.    int quote = 0;
  97.    char c,d,*sp,*qp,*cp,*q;
  98.    char *malloc();
  99.  
  100.    sp = s;
  101.    while (c = *sp++) {
  102.       cp = quotechar;
  103.       while ((d = *cp++) && c != d)
  104.      ;
  105.       if (cp != endq) {
  106.          quote = 1;
  107.      break;
  108.      }
  109.       }
  110.    if (quote) {
  111.       qp = q = malloc(4 * strlen(s) + 1);
  112.       *qp++ = '\'';
  113.       sp = s;
  114.       while (c = *sp++) {
  115.      if (c == '\'') {
  116.         *qp++ = '\'';
  117.         *qp++ = '6';
  118.         *qp++ = '\'';
  119.         *qp++ = '\'';
  120.         quote = 1;
  121.         }
  122.      else *qp++ = c;
  123.      }
  124.       *qp++ = '\'';
  125.       *qp++ = '\0';
  126.       }
  127.    else {
  128.       q = malloc(strlen(s) + 1);
  129.       strcpy(q,s);
  130.       }
  131.    return q;
  132.    }
  133.  
  134.  
  135. /*
  136.  * SortOptions -- sorts icont options so that options and file names can
  137.  * appear in any order.
  138.  */
  139. void
  140. SortOptions(argv)
  141. char *argv[];
  142.    {
  143.    char **last,**p,*q,**op,**fp,**optlist,**filelist,opt,*s,*malloc();
  144.    int size,error = 0;;
  145.  
  146.    /*
  147.     * Count parameters before -x.
  148.     */
  149.    ++argv;
  150.    for (last = argv; *last != NULL && strcmp(*last,"-x") != 0; ++last)
  151.       ;
  152.    /*
  153.     * Allocate a work area to build separate lists of options
  154.     * and filenames.
  155.     */
  156.    size = (last - argv + 1) * sizeof(char*);
  157.    optlist = filelist = NULL;
  158.    op = optlist = (char **)malloc(size);
  159.    fp = filelist = (char **)malloc(size);
  160.    if (optlist && filelist) {            /* if allocations ok */
  161.       for (p = argv; (s = *p); ++p) {        /* loop thru args */
  162.          if (error) break;
  163.      if (s[0] == '-' && (opt = s[1]) != '\0') { /* if an option */
  164.         if (q = strchr(Options,opt)) {    /* if valid option */
  165.            *op++ = s;
  166.            if (q[1] == ':') {        /* if has a value */
  167.           if (s[2] != '\0') s += 2;    /* if value in this word */
  168.           else s = *op++ = *++p;    /* else value in next word */
  169.           if (s) {            /* if next word exists */
  170.              if (opt == 'S') {        /* if S option */
  171.             if (s[0] == 'h') ++s;    /* bump past h (??) */
  172.             if (s[0]) ++s;        /* bump past letter */
  173.             else error = 3;        /* error -- no letter */
  174.             if (s[0] == '\0') {    /* if value in next word */
  175.                if ((*op++ = *++p) == NULL)
  176.                      error = 4;    /* error -- no next word */
  177.                }
  178.             }
  179.              }
  180.           else error = 1;    /* error -- missing value */
  181.           }
  182.            }
  183.            else error = 2;        /* error -- invalid option */
  184.         }
  185.      else {                    /* else a file */
  186.         *fp++ = s;
  187.         }
  188.      }
  189.       *op = NULL;
  190.       *fp = NULL;
  191.       if (!error) {
  192.      p = argv;
  193.      for (op = optlist; *op; ++op) *p++ = *op;
  194.      for (fp = filelist; *fp; ++fp) *p++ = *fp;
  195.      }
  196.       }
  197.    if (optlist) free(optlist);
  198.    if (filelist) free(filelist);
  199.    return;
  200.    }
  201. #endif                    /* MPW */
  202. #endif                    /* MACINTOSH */
  203.  
  204. #if MSDOS
  205.  
  206. #if MICROSOFT
  207.  
  208. pointer xmalloc(n)
  209.    long n;
  210.    {
  211.    return calloc((size_t)n,sizeof(char));
  212.    }
  213. #endif                    /* MICROSOFT */
  214.  
  215. #if MICROSOFT || LATTICE
  216. int _stack = (8 * 1024);
  217. #endif                    /* MICROSOFT || LATTICE */
  218.  
  219. #if TURBO
  220. extern unsigned _stklen = 8192;
  221. #endif                    /* TURBO */
  222. #endif                    /* MSDOS */
  223.  
  224. #if MVS || VM
  225. #if SASC
  226. #include <options.h>
  227. char _linkage = _OPTIMIZE;
  228.  
  229. #if MVS                 /* expect dsnames, not DDnames, as file names */
  230. char *_style = "tso:";
  231. #define SYS_OSVS
  232. #else                    /* MVS */
  233. #define SYS_CMS
  234. #endif                    /* MVS */
  235.  
  236. #define RES_IOUTIL
  237. #define RES_DSNAME
  238. #if VM
  239. #define BIMODAL_CMS
  240. #endif                    /* VM */
  241.  
  242. #include <resident.h>
  243.  
  244. #if VM
  245. #include <cmsexec.h>
  246. #endif                    /* VM */
  247. /*
  248.  * No execvp, so turn it into a call to system.  (Then caller can exit.)
  249.  * In VM, put the ICONX command on the CMS stack, and someone else will
  250.  * do it after we're gone.  (system would clobber the user area.)
  251.  */
  252. int sysexec(cmd, argv)
  253.    char *cmd;
  254.    char **argv;
  255.    {
  256. #if MVS
  257.       char *prefix = "tso:";
  258. #else                    /* MVS */
  259.       char *prefix = "";
  260. #endif                    /* MVS */
  261.       int cmdlen = strlen(cmd) + strlen(prefix) + 1;
  262.       char **p;
  263.       char *cmdstr, *next;
  264.  
  265.       for(p = argv+1; *p; ++p)
  266.          cmdlen += strlen(*p) + 1;
  267.       cmdstr = malloc(cmdlen);      /* blithely ignoring failure...  */
  268.       strcpy(cmdstr, prefix);
  269.       strcat(cmdstr, cmd);
  270.       next = cmdstr + strlen(prefix) + strlen(cmd);
  271.       for (p = argv+1; *p; ++p)
  272.          {
  273.              *next = ' ';
  274.              strcpy(next+1, *p);
  275.              next += strlen(*p) + 1;
  276.           }
  277.       *next = '\0';
  278. #if MVS
  279.       return(system(cmdstr));
  280. #else                    /* MVS */
  281.       cmspush(cmdstr);
  282.       return NormalExit;
  283. #endif                    /* MVS */
  284.    }
  285. #endif                    /* SASC */
  286. #endif                    /* MVS || VM */
  287.  
  288. #if OS2
  289. #endif                    /* OS2 */
  290.  
  291. #if UNIX
  292. #endif                    /* UNIX */
  293.  
  294. #if VMS
  295. #endif                    /* VMS */
  296.  
  297. /*
  298.  * End of operating-system specific code.
  299.  */
  300.  
  301. static char *tjunk;            /* avoid empty module */
  302.